home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / wc.arc / WC.C next >
Text File  |  1986-04-10  |  1KB  |  63 lines

  1. /*  Figure 1  - wc program */
  2.  
  3. /* wc.c - count words */
  4. #include <stdio.h>
  5. #define  WORD   0
  6. #define  NOT_WORD 1
  7.  
  8. FILE *fd ;
  9.  
  10. main(argc,argv)
  11.  int argc ;
  12.  char *argv[] ;
  13.  {
  14.    int c ;
  15.    long wc ;
  16.  
  17.    if( argc < 2  )
  18.      { printf("\n no name");
  19.        exit(0) ;
  20.      }
  21.    fd = fopen(argv[1],"r");      /* open the file */
  22.    if( fd == 0 )
  23.      { printf("\n can't open");
  24.        exit(0) ;
  25.      }
  26.  
  27.    wc = 0 ;
  28.    while( skip(NOT_WORD) != EOF )        /* skip to beginning of next word */
  29.      { wc++ ;
  30.        if( skip(WORD) == EOF )           /* skip to end of the word */
  31.            break ;
  32.      } ;
  33.    fclose(fd) ;
  34.    printf("\n %ld words",wc);
  35.  }
  36.  
  37.  
  38. int check(c)           /* classify a char as part of word or not */
  39.  {
  40.        c = c & 0x7f ;
  41.        if( (c == ' ')
  42.         || (c == '\c')
  43.         || (c == '\n')
  44.         || (c == ',')
  45.         || (c == '.')
  46.         || (c == '(')
  47.         || (c == ')') )
  48.           return( NOT_WORD ) ;
  49.        else return( WORD ) ;
  50.  }
  51.  
  52. int skip(skip_type)    /* skip chars of skip_type in file fd */
  53.  int skip_type ;
  54.  {
  55.    int c ;
  56.  
  57.    c = getc(fd) ;
  58.    while( (c != EOF) && (check(c) == skip_type ) )
  59.      { c = getc(fd) ; } ;
  60.    return( c ) ;
  61.  }
  62.  
  63.